home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-11-17 | 37.2 KB | 1,081 lines |
- MODULE WPrint;
-
- FROM SYSTEM IMPORT VAL, ADDRESS, ADR, LONG;
- (* Libary SYSTEM *)
- FROM Application IMPORT Init, Terminate;
- IMPORT GEMDOS;
- FROM Clock IMPORT Time, GetTime;
- FROM FileName IMPORT filename, compose, GetDriveAndPath, ClearFilename;
- FROM TermWindow IMPORT WriteString, WriteLn, Read, Write, GetPos, SetPos,
- Tab, ResetTerminal, InitTerminal, OpenTerminal,
- CloseTerminal, DeleteTerminal, NewTitle;
- (* Libary GEMLIB *)
- FROM AES IMPORT WindowGet, FormAlert, GrafMouse;
- FROM GEMAESBase IMPORT WorkXYWH;
- IMPORT Terminal; (* STDLIB *)
- (* MYLIB *)
- FROM DruckTreiber IMPORT ConfigPrinter, PrintChar, PrintLn, PrintFormFeed,
- PrintHandle, Steuer, SetLQ, CfgError, S;
- FROM Storage IMPORT Available, Allocate, Deallocate;
- FROM Strings IMPORT Delete, Insert, Concat, Length, IntToString, StringToInt,
- Assign, Copy, Fill, LongIntToString;
- FROM XFSelect IMPORT ExSelectFilename;
-
- CONST StdTimeout = 10000D;
-
- TYPE Schriftarten = (nix, Pica, Elite, Schmal, Breit);
- Schriftart = RECORD
- p: Schriftarten;
- prop: BOOLEAN;
- END;
- Ausgabegeraet = (datei,parallel,seriell);
- String40 = ARRAY[0..39] OF CHAR;
- KopfFussZeile = RECORD
- Links, Mitte, Rechts : String40;
- underlined, exists, onFirstPage : BOOLEAN;
- END;
- DTAType = RECORD
- Attribut : ARRAY[0..21] OF CHAR;
- Date, Time : CARDINAL;
- Laenge : LONGCARD;
- Name : ARRAY[0..11]OF CHAR;
- END;
- ReadyProc = PROCEDURE() : BOOLEAN;
-
- VAR Ready : ReadyProc;
- Attribut : ARRAY[0..7]OF BOOLEAN;
- DateString, TimeString, TxtHeadName : ARRAY[0..17] OF CHAR;
- MainPitch, FNPitch, TextPitch, Pitch : Schriftart;
- LineHight : ARRAY[Pica..Breit] OF INTEGER;
- TextP, FNP,
- PrinterTimeout : LONGCARD;
- PStart, PufferT, Puffer, PufferBottom, PufferTop, PufferLaenge : LONGINT;
- P : POINTER TO CHAR;
- msg : String40;
- KopfZeile, FussZeile : KopfFussZeile;
- TxtMaske, CfgMaske, TxtDateiName, CfgDateiName, OutName, OutMaske
- : filename;
- BoxText, LeerString, OutDatei, CfgDatei, TxtDatei : ARRAY[0..127]OF CHAR;
- Title, TxtHeadPath : ARRAY[0..77] OF CHAR;
- WpPageLength, PageLength, RandOben, RandText, RandFuss, RandUnten,
- FNRandOben, FNRandUnten, FNOffset, oldFNOffset, FNcp, FNStrich, LinkerRand,
- RechterRand, PageNum, PageNumOffset, ErsteSeite, LetzteSeite, LineOffset,
- LineNum, LHTeiler, PrnHandle, MaxLF, Zeile, FN1, FN2, FNist, DispZeile,
- xmin, ymin, breite, hoehe, PrintedPages
- : INTEGER;
- undefiniert, fertig, LQ, print, ende, KopfAlternierend, noFile, ueberspringen, ZeileistLeer : BOOLEAN;
- c, TextAttribut, FNattribut : CHAR;
- ausgabe : Ausgabegeraet;
-
- PROCEDURE DateiReady() : BOOLEAN; BEGIN RETURN TRUE END DateiReady;
-
- PROCEDURE KeyPressed() : BOOLEAN;
- BEGIN
- RETURN GEMDOS.ConIS()
- END KeyPressed;
-
- PROCEDURE Message(s : ARRAY OF CHAR);
- VAR lin, col : INTEGER;
- BEGIN
- SetPos(19,1); Fill(LeerString,60-Length(s),' '); WriteString(s);
- GetPos(lin,col); WriteString(LeerString); SetPos(lin,col);
- END Message;
-
- PROCEDURE WriteInt(n : INTEGER);
- VAR h : ARRAY[0..3] OF CHAR; i : INTEGER;
- BEGIN
- IntToString(h,n);
- FOR i:=1 TO 3-VAL(INTEGER,Length(h)) DO Write(' ') END;
- WriteString(h);
- END WriteInt;
-
- PROCEDURE IntToRoman(VAR s : ARRAY OF CHAR; n : INTEGER; gross : BOOLEAN);
- VAR l, f, z, e : INTEGER; EinsC, FuenfC, ZehnC : CHAR; neg : BOOLEAN;
- EinsArray, FuenfArray : ARRAY[0..3] OF CHAR;
- BEGIN
- EinsArray:='ixcm'; FuenfArray:='vld '; e:=0; l:=0;
- neg:=n<0; IF neg THEN n:=-n END;
- WHILE (n>0) & (e<4) DO
- EinsC:=EinsArray[e]; FuenfC:=FuenfArray[e];
- IF e<3 THEN ZehnC:=EinsArray[e] END;
- IF gross THEN EinsC:=CAP(EinsC); FuenfC:=CAP(FuenfC);
- ZehnC:=CAP(ZehnC); END;
- z:=n MOD 10; f:=n MOD 5; n:=n DIV 10; INC(e);
- IF f=4 THEN IF z>5 THEN s[l]:=ZehnC ELSE s[l]:=FuenfC END;
- f:=1; INC(l)
- ELSE IF z>4 THEN s[l]:=FuenfC; INC(l) END
- END;
- WHILE f>0 DO s[l]:=EinsC; INC(l); DEC(f); END;
- END;
- IF neg THEN s[l]:='-'; INC(l) END;
- s[l]:=0C; DEC(l);
- FOR e:=0 TO l DO EinsC:=s[e]; s[e]:=s[l-e]; s[l-e]:=EinsC END;
- END IntToRoman;
-
- PROCEDURE ReadString(lin,col : INTEGER; VAR s : ARRAY OF CHAR);
- VAR c,c2,sc : CHAR; exit : BOOLEAN;
- x, hs,i,l,ll, VTlin, VTcol : INTEGER;
- h,CursorOff : ARRAY[0..1] OF CHAR;
- escape : ARRAY[0..7] OF CHAR;
- BEGIN
- h:=' '; x:=0; l:=0; hs:=HIGH(s); CursorOff:=' f'; CursorOff[0]:=33C;
- escape:=' Y e'; escape[0]:=33C; escape[4]:=33C;
- VTcol:=col+1+(xmin-1) DIV 8; VTlin:=lin+1+(ymin+15) DIV 16;
- REPEAT
- exit:=FALSE; s[hs]:=0C;
- SetPos(lin,col); WriteString(s); FOR i:=0 TO l-1 DO Write(' '); END;
- l:=VAL(INTEGER,Length(s));
- SetPos(lin,col+x);
- escape[2]:=CHR(32+VTlin); escape[3]:=CHR(32+VTcol+x);
- GEMDOS.ConWS(escape);
- GEMDOS.RawScanIn(c,sc); GEMDOS.ConWS(CursorOff);
- CASE c OF
- 0C: CASE sc OF
- 16C: IF x>0 THEN DEC(x); Delete(s,x,1); END;
- | 34C,162C: exit:=TRUE;
- | 107C: (* CLR *) s:=''; x:=0;
- | 113C: (* $4B *) IF x>0 THEN DEC(x) END;
- | 115C: (* $4D *) INC(x);
- | 122C: (* Ins *) h[0]:=' '; Insert(h,VAL(CARDINAL,x),s);
- | 123C: (* DEL *) IF l>0 THEN Delete(s,x,1); END;
- ELSE
- END;
- | 10C: IF x>0 THEN DEC(x); Delete(s,x,1); END;
- | 15C: exit:=TRUE;
- | 177C: IF l>0 THEN Delete(s,x,1); END;
- | 40C..176C, 200C..377C:
- h[0]:=c; Insert(h,VAL(CARDINAL,x),s); INC(x);
- ELSE
- END;
- ll:=VAL(CARDINAL,Length(s));
- IF x>ll THEN x:=ll END; IF x<0 THEN x:=0 END;
- l:=l-ll;
- UNTIL exit;
- END ReadString;
-
- PROCEDURE Initialisieren;
- VAR i:INTEGER;
- t : Time; h : ARRAY[0..11]OF CHAR;
- BEGIN
- FOR i:=0 TO 7 DO Attribut[i]:=TRUE END;
- KopfAlternierend:=FALSE; FNist:=0;
- PageNumOffset:=0; FNOffset:=0; oldFNOffset:=0; LineOffset:=8;
- LinkerRand:=0; RechterRand:=0; WpPageLength:=72;
- MainPitch.p:=nix; TextPitch.p:=Pica; Pitch.p:=nix; FNPitch.p:=nix;
- MainPitch.prop:=FALSE; TextPitch.prop:=FALSE; Pitch.prop:=FALSE; FNPitch.prop:=FALSE;
- LQ:=FALSE;
- ErsteSeite:=1; LetzteSeite:=999;
- WITH KopfZeile DO
- Links:=''; Mitte:=''; Rechts:='';
- onFirstPage:=TRUE; underlined:=FALSE; exists:=FALSE;
- END;
- FussZeile:=KopfZeile;
-
- GetTime(t);
- IntToString(DateString,t.day MOD 32); t.day:=t.day DIV 32;
- CASE (t.day MOD 16) OF
- 1: h:='.Januar ';
- | 2: h:='.Februar ';
- | 3: h:='.März ';
- | 4: h:='.April ';
- | 5: h:='.Mai ';
- | 6: h:='.Juni ';
- | 7: h:='.Juli ';
- | 8: h:='.August ';
- | 9: h:='.September ';
- |10: h:='.Oktober ';
- |11: h:='.November ';
- |12: h:='.Dezember ';
- ELSE
- END;
- Concat(DateString,h,DateString);
- IntToString(h,1900+t.day DIV 16); Concat(DateString,h,DateString);
- IntToString(TimeString,t.minute DIV 60); t.minute:=t.minute MOD 60;
- IntToString(h,t.minute); Concat(TimeString,'.',TimeString);
- IF t.minute<10 THEN Concat(TimeString,'0',TimeString) END;
- Concat(TimeString,h,TimeString);
- END Initialisieren;
-
- PROCEDURE DruckAbbrechen() : BOOLEAN;
- VAR res : INTEGER;
- BEGIN
- GrafMouse(257,NIL);
- res:=FormAlert(1,BoxText);
- GrafMouse(256,NIL);
- IF res=2 THEN PufferT:=PufferBottom; print:=FALSE;
- Message('Druck abgebrochen nach'); ende:=TRUE;
- RETURN TRUE
- ELSE RETURN FALSE END;
- END DruckAbbrechen;
-
- PROCEDURE WaitForReady() : BOOLEAN;
- VAR t: Time; add,t0,t1 : LONGCARD;
- BEGIN
- GetTime(t); t0:=LONG(t.millisecond); add:=0D;
- REPEAT
- GetTime(t); t1:=LONG(t.millisecond);
- IF t1<t0 THEN add:=60000D END;
- t1:=add+t1;
- UNTIL ((t1-t0)>PrinterTimeout) OR Ready();
- IF Ready() THEN
- RETURN FALSE
- ELSE
- IF ausgabe=parallel THEN
- BoxText:='[1][ Drucker streikt! ][ weiter | abbrechen ]';
- ELSE
- BoxText:='[1][ Schnittstelle blockiert! ][ weiter | abbrechen ]';
- END;
- PrinterTimeout:=500D;
- RETURN DruckAbbrechen();
- END (* IF Ready() *);
- END WaitForReady;
-
- PROCEDURE SendChar(c : CHAR);
- VAR ok : BOOLEAN;
- BEGIN
- REPEAT
- IF Ready() THEN PrintChar(c); ok:=TRUE; PrinterTimeout:=StdTimeout;
- ELSE ok:=WaitForReady(); END;
- UNTIL ok;
- END SendChar;
-
- PROCEDURE SteuerCode( code, wert : INTEGER);
- VAR ok : BOOLEAN;
- BEGIN
- IF ~ende THEN REPEAT
- IF Ready() THEN Steuer(code,wert); ok:=TRUE; PrinterTimeout:=StdTimeout;
- ELSE ok:=WaitForReady() END;
- UNTIL ok END;
- END SteuerCode;
-
- PROCEDURE PrintString( s : ARRAY OF CHAR);
- VAR i,l : CARDINAL;
- BEGIN
- l:=Length(s);
- IF l>0 THEN FOR i:=0 TO l-1 DO SendChar(s[i]) END END;
- END PrintString;
-
- PROCEDURE SetPitch ( p : Schriftart );
- VAR code:INTEGER;
- BEGIN
- Pitch:=p;
- CASE Pitch.p OF
- Pica: code:=28H;
- | Elite: code:=2AH;
- | Schmal: code:=2CH;
- | Breit: code:=2EH;
- END;
- IF print THEN
- SteuerCode(code,-1);
- IF p.prop THEN SteuerCode(35H,-1)
- ELSE SteuerCode(36H,-1); END;
- END;
- END SetPitch;
-
- PROCEDURE SetAttribut(c:CHAR);
- VAR a,i,code : INTEGER;
- BEGIN
- a:=ORD(c);
- FOR i:=0 TO 5 DO
- IF ODD(a)#Attribut[i] THEN
- Attribut[i]:=ODD(a);
- CASE i OF
- 0: code:=6;
- | 1: code:=0EH;
- | 2: code:=0AH;
- | 3: code:=1AH;
- | 4: code:=12H;
- | 5: code:=16H;
- END;
- IF ~Attribut[i] THEN code:=code+1 END;
- SteuerCode(code,-1);
- END;
- a:=a DIV 2;
- END;
- END SetAttribut;
-
- PROCEDURE GetC(VAR c :CHAR );
- VAR h : ARRAY[0..3] OF CHAR;
- BEGIN
- IF Puffer<PufferT THEN P:=VAL(ADDRESS,Puffer); c:=P^;
- ELSE c:=0C END;
- END GetC;
-
- PROCEDURE NextC( VAR c : CHAR );
- VAR h : ARRAY[0..3] OF CHAR;
- BEGIN
- IF Puffer<PufferT THEN
- Puffer:=Puffer+1D; P:=VAL(ADDRESS,Puffer); c:=P^;
- IF KeyPressed() THEN
- BoxText:='[1][ Benutzerunterbrechung. ][ weiter | abbrechen ]';
- IF DruckAbbrechen() THEN c:=0C END;
- END;
- ELSE c:=0C END;
- END NextC;
-
- PROCEDURE SkipLine;
- VAR c:CHAR;
- BEGIN
- GetC(c); WHILE (c#0C) & (c#12C) DO NextC(c) END;
- NextC(c); (* Anfang der nächsten Zeile *)
- END SkipLine;
-
- PROCEDURE GetInt(VAR i : INTEGER);
- VAR c : CHAR;
- BEGIN
- GetC(c); i:=0;
- WHILE (c>='0') &(c<='9') DO
- i:=10*i+ORD(c)-30H; NextC(c); END;
- END GetInt;
-
- PROCEDURE LinealLesen( rand : BOOLEAN; VAR p : Schriftart );
- VAR c:CHAR; lr,rr : INTEGER;
- BEGIN
- NextC(c); lr:=0; rr:=0;
- IF rand THEN
- WHILE (c#0C) & (c#'[') DO NextC(c); INC(lr); END; rr:=lr END;
- WHILE (c#0C) & (c#']') DO NextC(c); INC(rr); END; (* c jetzt = ']' *)
- IF rand THEN LinkerRand:=lr; RechterRand:=rr END;
- NextC(c);
- CASE c OF
- '0': p.p:=Pica; |
- '1': p.p:=Elite; |
- '2': p.p:=Schmal;|
- '3': p.p:=Breit;
- ELSE
- END;
- NextC(c);
- NextC(c);
- NextC(c); p.prop:=(c='1');
- END LinealLesen;
-
- PROCEDURE KopfZeileLesen( VAR Z : KopfFussZeile);
- VAR i,j:INTEGER; c:CHAR;
- BEGIN
- WITH Z DO
- i:=0; j:=0;
- NextC(c);
- WHILE c>36C DO
- IF (c=37C) OR (c='|') THEN INC(i); j:=0;
- ELSE IF j<39 THEN
- IF c='_' THEN underlined:=TRUE
- ELSE
- CASE i OF
- 0: Links[j]:=c; Links[j+1]:=0C; exists:=TRUE;
- | 1: Mitte[j]:=c; Mitte[j+1]:=0C; exists:=TRUE;
- | 2: Rechts[j]:=c; Rechts[j+1]:=0C; exists:=TRUE;
- | 3: onFirstPage:= c='1';
- ELSE
- END (* CASE i OF *);
- INC(j);
- END (* IF c='_' .. ELSE *);
- END (* IF j<39 *) END (* IF c=37C *);
- NextC(c);
- END (* WHILE c>36C *);
- END; (* WITH Z *)
- END KopfZeileLesen;
-
- PROCEDURE ParameterBerechnen;
- VAR lh : INTEGER;
- BEGIN
- LHTeiler:=180;
- lh:=ORD(S.par[2])*6;
- LineHight[Pica]:= (45 * lh) DIV LHTeiler;
- LineHight[Elite]:= 2*LineHight[Pica] DIV 3;
- LineHight[Schmal]:=LineHight[Pica] DIV 2;
- LineHight[Breit]:= 2*LineHight[Elite];
- LHTeiler:=lh; MaxLF:=255 * LHTeiler DIV 180;
- END ParameterBerechnen;
-
- PROCEDURE GetParameter(VAR ok:BOOLEAN);
- VAR c,cc:CHAR;
- BEGIN
- Puffer:=PufferBottom; PufferT:=PufferTop;
- GetC(c); ok:=c=37C;
- WHILE c=37C DO
- NextC(c);
- CASE c OF
- '0': NextC(cc); WpPageLength:=10*(ORD(cc)-30H);
- NextC(cc); WpPageLength:=WpPageLength+ORD(cc)-30H;
- NextC(cc); NextC(cc); RandOben:=ORD(cc)-30H;
- NextC(cc); NextC(cc); RandText:=ORD(cc)-30H;
- NextC(cc); NextC(cc); RandFuss:=ORD(cc)-30H;
- NextC(cc); NextC(cc); RandUnten:=ORD(cc)-30H; |
- '1': KopfZeileLesen(KopfZeile); |
- '2': KopfZeileLesen(FussZeile); |
- 'R': LinealLesen(FALSE,FNPitch); |
- 'F': NextC(cc); NextC(cc); FNRandOben:=ORD(cc)-30H;
- NextC(cc); FNRandUnten:=ORD(cc)-30H;
- NextC(cc); NextC(cc); NextC(cc); FNStrich:=ORD(cc)-30H;
- NextC(cc); FNStrich:=10*FNStrich+ORD(cc)-30H;
- GetInt(FNOffset); FNOffset:=FNOffset-1; |
- '9': IF MainPitch.p=nix THEN LinealLesen(TRUE,MainPitch);
- TextPitch:=MainPitch;
- ELSE LinealLesen(FALSE,TextPitch);
- END;
- ELSE
- END (* CASE *);
- SkipLine; GetC(c);
- END;
- PStart:=Puffer;
- IF MainPitch.p=nix THEN MainPitch.p:=Pica; END;
- IF TextPitch.p=nix THEN TextPitch:=MainPitch; END;
- IF FNPitch.p=nix THEN FNPitch:= MainPitch; END;
- END GetParameter;
-
- PROCEDURE SucheEinsF(x : CHAR);
- VAR c:CHAR;
- BEGIN
- GetC(c);
- REPEAT
- WHILE (c#0C) & (c#37C) DO NextC(c); END;
- NextC(c);
- UNTIL (c=0C) OR (c=x);
- END SucheEinsF;
-
- PROCEDURE PrintKopfZeile(VAR z : KopfFussZeile);
- VAR l : ARRAY[0..131] OF CHAR;
- PageNumString : ARRAY[0..11] OF CHAR;
- h : String40;
- j,PN : CARDINAL; i : INTEGER;
- PROCEDURE Copy( VAR from, into : ARRAY OF CHAR; VAR p : CARDINAL);
- VAR i,m,il : CARDINAL;
- BEGIN
- m:=Length(into); il:=VAL(CARDINAL,HIGH(into));
- FOR i:=0 TO Length(from)-1 DO
- IF p<=il THEN into[p]:=from[i] END;
- INC(p) END;
- END Copy;
- PROCEDURE HS(VAR s : ARRAY OF CHAR );
- VAR i,j : CARDINAL;
- BEGIN
- h[0]:=0C; j:=0;
- IF Length(s)>0 THEN
- FOR i:=0 TO Length(s)-1 DO
- CASE s[i] OF
- '#': IntToString(PageNumString,PN);
- Copy(PageNumString,h,j);
- | '~': IntToRoman(PageNumString,PN,TRUE);
- Copy(PageNumString,h,j);
- | '%',
- '@': Copy(DateString,h,j);
- | '$': Copy(TimeString,h,j);
- | '^': Copy(TxtHeadName,h,j);
- | '\': Copy(TxtHeadPath,h,j);
- ELSE
- h[j]:=s[i]; INC(j);
- END;
- END;
- IF j<=HIGH(h) THEN h[j]:=0C END;
- END;
- END HS;
- BEGIN
- IF (PageNum>1) OR z.onFirstPage THEN
- PN:=PageNum+PageNumOffset;
- Fill(l,RechterRand,' ');
- IF RechterRand<HIGH(l) THEN l[RechterRand+1]:=0C END;
- (* Links *)
- IF (KopfAlternierend & ODD(PN)) OR ~KopfAlternierend
- THEN HS(z.Links)
- ELSE HS(z.Rechts) END;
- j:=VAL(CARDINAL,LinkerRand);
- IF Length(h)>0 THEN Copy(h,l,j) END;
- (* Mitte *)
- HS(z.Mitte);
- IF Length(h)>0 THEN
- i:=RechterRand-LinkerRand-VAL(INTEGER,Length(h));
- IF i<0 THEN j:=0 ELSE j:=VAL(CARDINAL,i DIV 2) END;
- Copy(h,l,j); END;
- (* Rechts *)
- IF (KopfAlternierend & ODD(PN)) OR ~KopfAlternierend
- THEN HS(z.Rechts)
- ELSE HS(z.Links) END;
- IF Length(h)>0 THEN
- i:=RechterRand+1-VAL(INTEGER,Length(h));
- IF i<0 THEN j:=0 ELSE j:=VAL(CARDINAL,i) END;
- Copy(h,l,j) END;
- PrintString(l);
- SteuerCode(23H,-1);
- END;
- END PrintKopfZeile;
-
- PROCEDURE GotoLineNum(ln : INTEGER);
- VAR m : INTEGER; h : ARRAY[0..3] OF CHAR;
- BEGIN
- WHILE LineNum<ln DO
- m:=ln-LineNum; IF m>MaxLF THEN m:=MaxLF END;
- SteuerCode(25H,m);
- PrintLn;
- LineNum:=LineNum+m;
- END;
- SetPos(18,23); WriteInt(ln);
- END GotoLineNum;
-
- PROCEDURE ZeilenAnfang(pitch:Schriftart; attribut:CHAR);
- VAR i : INTEGER;
- BEGIN
- GotoLineNum(Zeile);
- SetAttribut(0C); SetPitch(MainPitch);
- IF S.c[5]>0 THEN SteuerCode(5,LineOffset)
- ELSE FOR i:=1 TO LineOffset DO SendChar(' ') END END;
- SetPitch(pitch); SetAttribut(attribut);
- END ZeilenAnfang;
-
- PROCEDURE ScanLine(SkipEinsC : INTEGER; VAR attr : CHAR; p : Schriftart);
- VAR c : CHAR; fn, d, Leerzeichen : INTEGER; hp : LONGINT;
- h : ARRAY[0..3] OF CHAR; oldattr : CHAR;
- PROCEDURE SetPrintPos;
- VAR i : INTEGER;
- BEGIN
- IF ZeileistLeer THEN ZeilenAnfang(p,oldattr) END;
- ZeileistLeer:=FALSE;
- IF Leerzeichen>0 THEN
- FOR i:=1 TO Leerzeichen DO SendChar(' ') END;
- Leerzeichen:=0 END;
- END SetPrintPos;
- BEGIN
- INC(DispZeile); SetPos(18,17); WriteInt(DispZeile);
- GetC(c); Leerzeichen:=0; oldattr:=attr;
- WHILE c>17C DO
- CASE c OF
- 30C: IF print THEN
- SetPrintPos;
- NextC(c); GetInt(d); NextC(c); GetInt(d); c:=1C;
- d:=d+FNOffset; IntToString(h,d);
- PrintString(h); (* c ist jetzt $18 *) END;
- | 31C: c:='-';
- | 33C: NextC(attr); IF ZeileistLeer THEN oldattr:=attr END;
- IF print THEN SetPrintPos; SetAttribut(attr);
- ELSE ZeileistLeer:=FALSE END;
- | 34C: IF SkipEinsC>0 THEN DEC(SkipEinsC)
- ELSE INC(Leerzeichen);
- IF SkipEinsC<0 THEN INC(Leerzeichen); INC(SkipEinsC) END;
- END;
- | 35C,36C: INC(Leerzeichen);
- | 37C: RETURN;
- | 40C: INC(Leerzeichen);
- ELSE
- END;
- IF c>40C THEN
- ueberspringen:=FALSE;
- IF print THEN SetPrintPos; SendChar(c);
- ELSE ZeileistLeer:=FALSE; END;
- END;
- NextC(c);
- END;
- IF print THEN SteuerCode(23H,-1) END;
- END ScanLine;
-
- PROCEDURE DruckeFussnote;
- VAR HPuffer : LONGINT; hl,i : CARDINAL; newline : BOOLEAN; c : CHAR;
- h : ARRAY[0..3] OF CHAR; z : INTEGER;
- BEGIN
- TextP:=Puffer;
- Puffer:=FNP;
- IF print THEN
- SetPitch(FNPitch);
- z:=PageLength-FNcp;
- IF z<=Zeile THEN Zeile:=Zeile+LineHight[FNPitch.p]
- ELSE Zeile:=z END;
- IF FNRandOben>0 THEN
- Zeile:=Zeile+(FNRandOben-1)*LineHight[FNPitch.p];
- ZeilenAnfang(FNPitch,10C);
- FOR i:=1 TO VAL(CARDINAL,FNStrich) DO SendChar(' ') END;
- SetAttribut(0C); SteuerCode(23H,-1);
- Zeile:=Zeile+LineHight[FNPitch.p];
- END;
- Zeile:=Zeile+FNRandUnten*LineHight[FNPitch.p];
- END;
-
- WHILE FNist<FN2 DO (* Zeiger steht auf 'N' *)
-
- WHILE FNist<FN1 DO
- SucheEinsF('N'); (* Zeiger steht auf 'N' *)
- NextC(c); GetInt(FNist); GetC(c); IF c=0C THEN FNist:=9999 END;
- END (* WHILE FNist<FN1 DO *);
-
- SkipLine;
- IF print THEN
- IntToString(h,FNist+FNOffset);
- ZeilenAnfang(FNPitch,20C);
- GetC(c); i:=0;
- WHILE (c<40C)&(i<3) DO
- IF c=33C THEN NextC(FNattribut); NextC(c) END;
- NextC(c); INC(i);
- END;
- hl:=3-Length(h); FOR i:=1 TO hl DO SendChar(' ') END;
- PrintString(h);
- ZeileistLeer:=FALSE;
-
- GetC(c);
- WHILE (c#0C) & (c#37C) DO
- IF c=13C THEN NextC(c); NextC(c) END; (* darf nicht vorkommen! *)
- IF c>17C THEN
- IF ~ZeileistLeer THEN SetAttribut(FNattribut) END;
- ScanLine(0,FNattribut,FNPitch); ZeileistLeer:=TRUE;
- END;
- SkipLine; GetC(c);
- Zeile:=Zeile+LineHight[FNPitch.p];
- END (* WHILE c#0 & c#37C *);
- END (* IF print *);
- INC(FN1);
- END (* WHILE FNist<=FN2 *);
- FNP:=Puffer;
- Puffer:=TextP;
- END DruckeFussnote;
-
- PROCEDURE SeitenAnfang;
- VAR i :INTEGER;
- BEGIN
- PageNum:=ABS(PageNum);
- print:= (PageNum>=ErsteSeite) & (PageNum<=LetzteSeite) & ~ende;
- LineNum:=0; DispZeile:=0;
- SetPos(18,0); WriteString('Seite:'); WriteInt(PageNum);
- WriteString(', Zeile: 0');
- Zeile:=RandOben*LineHight[MainPitch.p];
- IF print THEN
- Message('Drucken ...');
- IF undefiniert THEN
- SteuerCode(1FH,-1); (* Init Horizontal *)
- SteuerCode(20H,-1); (* Init Vertikal *)
- SteuerCode(24H,-1); (* Zeilen/Seite *)
- SendChar(CHR(WpPageLength));
- SteuerCode(36H,-1); (* Proportional aus *)
- SetPitch(MainPitch);
- SetAttribut(0C);
- undefiniert:=FALSE;
- END;
- IF KopfZeile.exists THEN
- IF KopfZeile.underlined THEN ZeilenAnfang(MainPitch,10C)
- ELSE ZeilenAnfang(MainPitch,0C) END;
- PrintKopfZeile(KopfZeile);
- PrintedPages:=PageNum;
- END;
- ELSE Message('Suchen ...')
- END;
- Zeile:=Zeile+RandText*LineHight[MainPitch.p];
- FNcp:=0; FN1:=0; FN2:=0; ueberspringen:=TRUE; ZeileistLeer:=TRUE;
- END SeitenAnfang;
-
- PROCEDURE SeitenEnde;
- VAR i:INTEGER;
- BEGIN
- IF print THEN
- IF (FN1>0) THEN DruckeFussnote END;
- IF FussZeile.exists THEN
- Zeile:=PageLength+(RandFuss-2)*LineHight[MainPitch.p];
- IF FussZeile.underlined THEN
- ZeilenAnfang(MainPitch,10C);
- FOR i:=1 TO LinkerRand-1 DO SendChar(' ') END;
- FOR i:=LinkerRand TO RechterRand DO SendChar(' ') END;
- SteuerCode(23H,-1);
- END;
- Zeile:=Zeile+LineHight[MainPitch.p]-1;
- ZeilenAnfang(MainPitch,0C);
- PrintKopfZeile(FussZeile);
- END;
- IF S.c[1EH]>0 THEN
- PrintFormFeed
- ELSE
- IF Zeile<WpPageLength*LineHight[MainPitch.p] THEN
- Zeile:=WpPageLength*LineHight[MainPitch.p];
- GotoLineNum(Zeile);
- END;
- END;
- END (* IF print THEN *);
- LineNum:=0;
- IF PageNum<0 THEN PageNum:=-PageNum END;
- PageNum:=PageNum+1;
- IF LetzteSeite<PageNum THEN fertig:=TRUE; print:=FALSE;
- Puffer:=PufferTop+1D END;
- PageNum:=-PageNum;
- END SeitenEnde;
-
- PROCEDURE IntLength( i : INTEGER ) : INTEGER;
- VAR l : INTEGER;
- BEGIN
- IF i<=0 THEN l:=1; i:=-i ELSE l:=0 END;
- WHILE i>0 DO i:=i DIV 10; INC(l) END;
- RETURN l;
- END IntLength;
-
- PROCEDURE Block(VAR p : Schriftart; VAR c : CHAR);
- VAR i,fnZeilen,fcp, cp, fNum, EinsC : INTEGER;
- HP : LONGINT;
- Nichtueberspringen : BOOLEAN;
- x : CHAR; h : ARRAY[0..5] OF CHAR;
- BEGIN
- GetC(c); Nichtueberspringen:=FALSE;
- WHILE (c#0C) & (c#37C) DO (* Zeilenschleife *)
- IF (c=14C) THEN SeitenEnde; NextC(c);
- ELSE
- fNum:=0; EinsC:=0; fcp:=0;
- IF c=13C THEN
- NextC(x); NextC(c);
- cp:=ORD(x); IF cp>80H THEN cp:=110H-cp END;
- cp:=cp-10H; Nichtueberspringen:=(cp>1);
- cp:=cp*LineHight[p.p];
- ELSE
- cp:=LineHight[p.p];
- END;
- HP:=Puffer;
- WHILE (c>17C) & (c#37C) DO (* nach Fussnote suchen und cp berechnen *)
- WHILE (c>17C)&(c#30C) DO NextC(c) END;
- IF c=30C THEN
- NextC(c); GetInt(fnZeilen); NextC(c); GetInt(fNum);
- IF ~print THEN FNP:=Puffer END;
- IF fnZeilen>0 THEN
- EinsC:=EinsC+IntLength(fNum+FNOffset)-IntLength(fNum+oldFNOffset);
- IF (FNcp=0)&(fcp=0) THEN
- fcp:=fcp+(FNRandOben+FNRandUnten)*LineHight[FNPitch.p] END;
- fcp:=fcp+LineHight[FNPitch.p]*fnZeilen;
- END;
- NextC(c);
- END; (* IF c=30C *)
- END (* WHILE c>17C *);
- Puffer:=HP; GetC(c);
-
- IF ((Zeile+cp+FNcp+fcp)>PageLength) & (PageNum>0) THEN
- SeitenEnde;
-
- END;
- IF (c#37C) & ~fertig THEN
- IF PageNum<0 THEN
- SeitenAnfang;
- IF fNum>0 THEN
- FNcp:=(FNRandOben+FNRandUnten)*LineHight[FNPitch.p];
- END;
- IF Nichtueberspringen THEN ueberspringen:=FALSE END;
- END;
- IF fNum>0 THEN
- IF FN1=0 THEN FN1:=fNum END;
- FN2:=fNum; FNcp:=FNcp+fcp;
- END;
- (* Zeile bearbeiten *)
- IF (c>0C)&(c#37C) THEN
- IF c>17C THEN
- ScanLine(EinsC,TextAttribut,TextPitch) END (* IF c>17C *);
- IF ~(ueberspringen & ZeileistLeer) THEN Zeile:=Zeile+LineHight[p.p] END;
- SkipLine; ZeileistLeer:=TRUE;
- END;
- END (* IF ~fertig *);
- GetC(c);
- END (* IF c=14C .. ELSE *);
- END (* WHILE *);
- END Block;
-
- PROCEDURE Drucken;
- VAR ok : BOOLEAN;
- c : CHAR; h : ARRAY[0..1] OF CHAR;
- BEGIN
- IF ausgabe=datei THEN
- ok:=GEMDOS.Delete(OutDatei);
- GEMDOS.Create(OutDatei,0,PrnHandle);
- IF PrnHandle<0 THEN
- Message('Konnte Ausgabedatei nicht öffnen!');
- ausgabe:=parallel;
- RETURN
- ELSE
- Message('Ausgabedatei geöffnet'); PrintHandle(PrnHandle);
- END;
- END;
- IF ausgabe=datei THEN
- PrintHandle(PrnHandle); Ready:=DateiReady;
- ELSIF ausgabe=parallel THEN
- PrintHandle(3); Ready:=GEMDOS.PrnOS;
- ELSE PrintHandle(2); Ready:=GEMDOS.AuxOS END;
- PufferT:=PufferTop;
- TextP:=PStart; FNP:=PStart; Puffer:=PStart;
- FNist:=0; FNcp:=0; FN1:=0; FN2:=0;
- PrinterTimeout:=500D;
- PageLength:=(LHTeiler DIV 6)*WpPageLength-(RandFuss-RandUnten)*LineHight[MainPitch.p];
- PageNum:=-1; TextAttribut:=0C; FNattribut:=0C;
- PrintedPages:=0;
- ende:=FALSE; fertig:=FALSE;
- SetLQ(LQ);
- Zeile:=0; LineNum:=0;
- undefiniert:=TRUE;
- REPEAT UNTIL ~KeyPressed();
- REPEAT
- Block(TextPitch,c);
- IF c#0C THEN
- NextC(c);
- CASE c OF
- '1': KopfZeileLesen(KopfZeile); SkipLine; GetC(c);
- | '2': KopfZeileLesen(FussZeile); SkipLine; GetC(c);
- | '9': LinealLesen(FALSE,TextPitch); SetPitch(TextPitch); SkipLine; GetC(c);
- | 'N': SucheEinsF('E'); SkipLine; GetC(c);
- ELSE
- msg:='Unvorhergesehener Fall in >Drucken<.'; h:=' '; h[0]:=c;
- Concat(msg,h,msg); Message(msg);
- END;
- END;
- UNTIL (c=0C) OR ende OR fertig;
- SeitenEnde;
- IF ~undefiniert THEN SteuerCode(21H,-1) END;
- IF ausgabe=datei THEN ok:=GEMDOS.Close(PrnHandle) END;
- IF ende THEN Message('Druck abgebrochen bei');
- ELSE Message('Druck beendet:') END;
- WriteInt(PrintedPages); Write('/');
- WriteInt(PrintedPages+PageNumOffset); WriteString(' Seiten.');
- END Drucken;
-
- PROCEDURE DateiWaehlen(VAR exit : BOOLEAN);
- VAR dta : POINTER TO DTAType;
- handle:INTEGER;
- ok : BOOLEAN;
- BEGIN
- GrafMouse(257,NIL);
- msg:='Bitte Textdatei auswählen...';
- ExSelectFilename(TxtMaske,TxtDateiName,exit,msg);
- IF ~exit THEN
- IF PufferBottom#0D THEN
- P:=VAL(ADDRESS,PufferBottom); Deallocate(P); PufferBottom:=0D END;
- compose(TxtDateiName, TxtMaske, TxtDatei);
- GEMDOS.SFirst(TxtDatei,0,handle);
- GEMDOS.GetDTA(dta);
- IF (handle=0) & Available(dta^.Laenge) THEN
- GEMDOS.Open(TxtDatei,0,handle);
- PufferLaenge:=dta^.Laenge;
- Allocate(P,PufferLaenge);
- PufferBottom:=VAL(LONGINT,P);
- PufferTop:=PufferBottom+PufferLaenge-1D;
- GEMDOS.Read(handle,PufferLaenge,P);
- ok:=GEMDOS.Close(handle);
- Message('Datei geladen');
- GetParameter(ok);
- Assign(TxtHeadName,TxtDateiName.name); Concat(TxtHeadName,'.',TxtHeadName);
- Concat(TxtHeadName,TxtDateiName.ext,TxtHeadName);
- TxtHeadPath:=' :'; TxtHeadPath[0]:=TxtDateiName.drv;
- Concat(TxtHeadPath,TxtDateiName.path,TxtHeadPath);
- ELSE exit:=TRUE;
- END (* IF Available *);
- END (* IF ~exit *);
- IF exit THEN Assign(Title,'Keine Datei ausgewählt');
- TxtDatei:='';
- Message(Title);
- ELSE Assign(Title,TxtDatei) END;
- NewTitle(Title);
- GrafMouse(256,NIL);
- END DateiWaehlen;
-
- PROCEDURE TreiberLaden( select : BOOLEAN; VAR exit : BOOLEAN);
- BEGIN
- GrafMouse(257,NIL);
- IF select THEN
- msg:='Druckertreiber auswählen ...';
- ExSelectFilename(CfgMaske,CfgDateiName,exit,msg);
- ELSE exit:=FALSE END;
- IF ~exit THEN
- compose(CfgDateiName,CfgMaske,CfgDatei);
- ConfigPrinter(3,CfgDatei,' ');
- IF CfgError=GEMDOS.EFilNF THEN exit:=TRUE
- ELSE Message('Druckertreiber geladen'); ParameterBerechnen END;
- END;
- GrafMouse(256,NIL);
- END TreiberLaden;
-
- PROCEDURE SelectOutfile;
- VAR exit : BOOLEAN;
- BEGIN
- GrafMouse(257,NIL);
- msg:='Ausgabedatei auswählen...';
- ExSelectFilename(OutMaske,OutName,exit,msg);
- IF ~exit THEN compose(OutName,OutMaske,OutDatei) END;
- GrafMouse(256,NIL);
- END SelectOutfile;
-
-
- PROCEDURE Menue(VAR c : CHAR);
- VAR ok : BOOLEAN; h : ARRAY[0..13] OF CHAR;
- PROCEDURE ChValue(lin,col,max:INTEGER; VAR n : INTEGER );
- VAR h : ARRAY[0..3] OF CHAR; x : CARDINAL; ok : BOOLEAN; y : INTEGER;
- BEGIN
- h:=''; SetPos(lin,col); WriteString(' ');
- ReadString(lin,col,h); ok:=TRUE;
- FOR x:=0 TO Length(h)-1 DO
- ok:=ok AND (((h[x]<='9') AND (h[x]>='0')) OR
- (h[x]='-') OR (h[x]='+')) END;
- IF ok THEN StringToInt(h,y); ok:=y<=max END;
- IF ok THEN Message('ok.'); n:=y;
- ELSE Message('Eingabefehler, Wert muß ≤');
- WriteInt(max); WriteString(' sein.'); END;
- END ChValue;
- PROCEDURE ZeigeZeilenHoehe( p:Schriftarten);
- BEGIN
- WriteInt(LineHight[p]); Write('/');
- WriteInt(LHTeiler); Write('"');
- IF MainPitch.p=p THEN Write('H')
- ELSE Write(' ') END;
- IF FNPitch.p=p THEN Write('F')
- ELSE Write(' ') END;
- END ZeigeZeilenHoehe;
- PROCEDURE Value(x : CHAR);
- BEGIN
- h:='';
- CASE x OF
- 'A': Fill(LeerString,70,' ');
- SetPos(6,2); WriteString(LeerString); SetPos(5,21);
- IF ausgabe=parallel THEN WriteString('Drucker')
- ELSIF ausgabe=datei THEN WriteString('Datei ');
- WriteLn; WriteString(' N Name der Datei:');
- Tab(21); WriteString(OutDatei);
- ELSE WriteString('seriell');
- END;
- | 'S': SetPos( 9,21); WriteInt(PageNumOffset);
- | 'F': SetPos(10,21); WriteInt(FNOffset);
- | '1': SetPos(11,21); WriteInt(ErsteSeite);
- | '9': SetPos(12,21); WriteInt(LetzteSeite);
- | 'R': SetPos(13,21); WriteInt(LineOffset);
- | 'W': SetPos(14,21); WriteInt(WpPageLength);
- IF Length(TxtHeadName)>0 THEN
- SetPos(3,55);
- WriteInt(WpPageLength);
- WriteString(' Zeilen/Seite');
- END;
- | 'K': SetPos(15,37);
- IF KopfAlternierend THEN WriteString('Ja ')
- ELSE WriteString('Nein') END;
- | 'P': SetPos( 9,60); ZeigeZeilenHoehe(Pica);
- | 'E': SetPos(10,60); ZeigeZeilenHoehe(Elite);
- | 'C': SetPos(11,60); ZeigeZeilenHoehe(Schmal);
- | 'B': SetPos(12,60); ZeigeZeilenHoehe(Breit);
- | 'Y': SetPos(13,56); WriteString(DateString);
- | 'Z': SetPos(14,56); WriteString(TimeString);
- | 'L': SetPos(15,56); IF LQ THEN WriteString('Ja ')
- ELSE WriteString('Nein') END;
- | 'Q': Message('Programmende.');
- | 'T': SetPos(3,21); WriteString(LeerString); Tab(21);
- IF Length(TxtHeadName)>0 THEN
- WriteString(TxtHeadName);
- WriteString(', '); LongIntToString(h,PufferLaenge);
- WriteString(h); WriteString(' Bytes,'); Tab(48);
- CASE MainPitch.p OF
- Pica: h:='Pica,';
- | Elite: h:='Elite,';
- | Schmal: h:='Schmal,';
- | Breit: h:='Breit,';
- ELSE
- END;
- WriteString(h);
- END;
- ELSE
- END;
- END Value;
- BEGIN
- REPEAT
- Fill(LeerString,55,' ');
- SetPos(0,0); WriteString(LeerString); SetPos(0,8);
- WriteString('Druckprogramm für 1stWordPlus mit variablem Zeilenabstand V1.3');
- SetPos(1,25); WriteString('©3/90 by Uwe Ischebeck'); WriteLn;
- WriteLn;
- WriteString(' T TextDatei:'); Value('T'); WriteLn;
- WriteString(' D Druckertreiber:'); Tab(21); WriteString(LeerString);
- Tab(21); WriteString(S.n^); WriteLn;
- WriteString(' A Ausgabe auf:'); WriteLn;
- WriteLn;
- WriteLn;
- WriteString(' Offset:'); Tab(45); WriteString('Zeichenhöhe:'); WriteLn;
- WriteString(' S Seitennummer:'); Tab(47); WriteString('P Pica:'); WriteLn;
- WriteString(' F Fussnoten:'); Tab(47); WriteString('E Elite:'); WriteLn;
- WriteString(' 1 Erste Seite:'); Tab(47); WriteString('C Compressed:'); WriteLn;
- WriteString(' 9 Letzte Seite:'); Tab(47); WriteString('B Breit:'); WriteLn;
- WriteString(' R Rand links:'); Tab(45); WriteString('Y Datum:'); WriteLn;
- WriteString(' W WP Seitenlänge:'); Tab(45); WriteString('Z Uhrzeit:'); WriteLn;
- WriteString(' K Kopf- und Fußzeilen auf geraden'); Tab(45); WriteString('L LQ:'); WriteLn;
- WriteString(' und ungeraden Seiten vertauschen'); WriteLn;
- Tab(37); WriteString('G (Go) Druck starten, Q Quit (Ende)');
- Value('A');
- Value('S'); Value('F'); Value('1'); Value('9'); Value('R'); Value('W');
- Value('P'); Value('E'); Value('C'); Value('B');
- Value('K'); Value('Y'); Value('Z'); Value('L');
- REPEAT
- SetPos(18,0); WriteString(' Make your choice > '); Tab(19);
- Read(c); c:=CAP(c);
- IF c>37C THEN Write(c); WriteString(' ');
- ELSE WriteInt(ORD(c)) END;
- WriteLn;
- Message(' ');
- CASE c OF
- 'S': ChValue( 9,21,999,PageNumOffset);
- | 'F': ChValue(10,21,999,FNOffset);
- | '1': ChValue(11,21,999,ErsteSeite);
- | '9': ChValue(12,21,999,LetzteSeite);
- | 'R': ChValue(13,21,70,LineOffset);
- | 'W': ChValue(14,21,255,WpPageLength);
- | 'P': ChValue( 9,60,255,LineHight[Pica]);
- | 'E': ChValue(10,60,255,LineHight[Elite]);
- | 'C': ChValue(11,60,255,LineHight[Schmal]);
- | 'B': ChValue(12,60,255,LineHight[Breit]);
- | 'K': KopfAlternierend:=~KopfAlternierend;
- | 'L': LQ:=~LQ;
- | 'Y': ReadString(13,56,DateString);
- | 'Z': ReadString(14,56,TimeString);
- | 'A': IF ausgabe=parallel THEN ausgabe:=seriell;
- ELSIF ausgabe=datei THEN ausgabe:=parallel;
- ELSE
- ausgabe:=datei;
- IF Length(OutDatei)=0 THEN SelectOutfile; c:='N'; END
- END;
- | 'N': IF ausgabe=datei THEN SelectOutfile END;
- | 'D': TreiberLaden(TRUE,ok);
- | 'G': IF noFile THEN Message('Keine Textdatei ausgewählt!');
- ELSE Message('Starte Druck...'); Drucken;
- END;
- | 'Q': SetPos(18,0);
- WriteString('Programmende (J/N)? '); Tab(19);
- Read(c); c:=CAP(c);
- IF c='J' THEN c:='Q'
- ELSE c:=' '
- END;
- ELSE
- END;
- Value(c);
- UNTIL (c='Q') OR (c='N') OR (c='T') OR (c='D');
- UNTIL (c='Q') OR (c='T');
- END Menue;
-
- BEGIN
- Init;
- InitTerminal(TRUE);
- WindowGet(0,WorkXYWH,xmin, ymin, breite, hoehe);
- IF breite>500 THEN
- GrafMouse(256,NIL);
- xmin:=xmin+8; breite:=breite-8; ymin:=ymin+10; hoehe:=hoehe-10;
- Title:='Druckprogramm für 1stWord Plus'; NewTitle(Title);
- OpenTerminal(xmin,ymin,breite,hoehe);
- Fill(LeerString,70,' ');
- PufferBottom:=0D;
- ausgabe:=parallel;
- TxtHeadName:='';
- GetDriveAndPath(TxtMaske); TxtMaske.name:='*'; TxtMaske.ext:='*';
- CfgMaske:=TxtMaske; CfgMaske.ext:='CFG';
- OutMaske:=TxtMaske; OutMaske.ext:='PRN';
- ClearFilename(TxtDateiName);
- CfgDateiName:=TxtDateiName;
- OutDatei:='';
- OutName:=TxtDateiName; OutName.name:='DEFAULT'; OutName.ext:='PRN';
- compose(OutName,OutMaske,OutDatei);
- PrnHandle:=3;
- WITH CfgDateiName DO name:='WPRINT'; ext:='CFG' END;
- TreiberLaden(FALSE,ende);
- IF ende THEN TreiberLaden(TRUE,ende) END;
- IF ~ende THEN (* ohne Treiber geht nichts *)
- REPEAT
- ende:=FALSE;
- Initialisieren;
- DateiWaehlen(noFile);
- Menue(c);
- UNTIL (c='Q') OR ende;
- END;
- CloseTerminal;
- DeleteTerminal;
- IF PufferBottom#0D THEN P:=VAL(ADDRESS,PufferBottom); Deallocate(P) END;
- GrafMouse(257,NIL);
- ELSE
- BoxText:='[1][ Läuft nur in hoher | und mittlerer Auflösung! ][ schade ]';
- xmin:=FormAlert(1,BoxText);
- END;
- Terminate;
- END WPrint.
-